package com.star.vrserver.utils;

import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTUtil {
    /**
     * jwt 有三部分组成：A.B.C
     * <p>
     * A：Header，{"type":"JWT","alg":"HS256"} 固定
     * <p>
     * B：playload，存放信息，比如，用户id，过期时间等等，可以被解密，不能存放敏感信息
     * <p>
     * C:  签证=A+B+秘钥 加密而成，只要秘钥不丢失，可以认为是安全的。
     * <p>
     * jwt 验证，主要就是验证C部分 是否合法。
     */
    // C部分
    private static final String JWT_TOKEN = "123456Star66!@#$$";
    //过期时间：5S
    private static final long EXPIRE_TIME = 5 * 60 * 60 * 1000;

    public static String createToken(String key) {
        // B部分
        Map<String, Object> claims = new HashMap<>();
        claims.put("key", key);
        // A部分
        JwtBuilder jwtBuilder = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, JWT_TOKEN) // 签发算法，秘钥为jwtToken
                .setClaims(claims) // body数据，要唯一，自行设置
                .setIssuedAt(new Date()) // 设置签发时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME));// 一天的有效时间（过期时间）
        return jwtBuilder.compact();
    }

    public static Map<String, Object> checkToken(String token) {
        try {
            Jwt parse = Jwts.parser().setSigningKey(JWT_TOKEN).parse(token);
            return (Map<String, Object>) parse.getBody();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }

}
